#include "message.hxx"
#include "message-odb.hxx"
#include "mysql_message.hpp"

#include <gflags/gflags.h>

DEFINE_bool(run_mode, false, "程序的运行模式， false-调试； true-发布");
DEFINE_string(log_file, "", "发布模式下，用于指定日志的输出文件");
DEFINE_int32(log_level, 0, "发布模式下，用于指定日志输出等级");


void insert(ChatSystem::MessageTable& msg_table)
{
    ChatSystem::Message msg1("msg1", "ssid1", "uid1", 0, boost::posix_time::time_from_string("2025-02-03 20:45:45.000"));
    ChatSystem::Message msg2("msg2", "ssid1", "uid2", 0, boost::posix_time::time_from_string("2025-02-03 20:45:44.000"));
    ChatSystem::Message msg3("msg3", "ssid1", "uid3", 0, boost::posix_time::time_from_string("2025-02-03 20:45:43.000"));
    ChatSystem::Message msg4("msg4", "ssid2", "uid4", 0, boost::posix_time::time_from_string("2025-02-03 20:45:41.000"));
    ChatSystem::Message msg5("msg5", "ssid2", "uid5", 0, boost::posix_time::time_from_string("2025-02-03 20:45:40.000"));

    msg_table.insert(msg1);
    msg_table.insert(msg2);
    msg_table.insert(msg3);
    msg_table.insert(msg4);
    msg_table.insert(msg5);
}


void remove (ChatSystem::MessageTable& msg_table)
{
    msg_table.remove("ssid1");
}

void recent_message (ChatSystem::MessageTable& msg_table)
{
    std::vector<ChatSystem::Message> msgs = msg_table.recent("ssid2", 2);
    for(auto& msg : msgs)
    {
        std::cout << msg.message_id() << std::endl;
        std::cout << msg.chat_session_id() << std::endl;
        std::cout << msg.user_id() << std::endl;
        std::cout << msg.message_type() << std::endl;
        std::cout << boost::posix_time::to_simple_string(msg.create_time()) << std::endl;
    }
}

void range_message (ChatSystem::MessageTable& msg_table)
{
    std::vector<ChatSystem::Message> msgs = msg_table.range("ssid2", 
        boost::posix_time::time_from_string("2025-02-03 20:45:40.000"),
        boost::posix_time::time_from_string("2025-02-03 20:45:45.000"));
    for(auto& msg : msgs)
    {
        std::cout << msg.message_id() << std::endl;
        std::cout << msg.chat_session_id() << std::endl;
        std::cout << msg.user_id() << std::endl;
        std::cout << msg.message_type() << std::endl;
        std::cout << boost::posix_time::to_simple_string(msg.create_time()) << std::endl;
    }
}

int main(int argc, char* argv[])
{
    google::ParseCommandLineFlags(&argc, &argv, true);
    ChatSystem::InitLogger(FLAGS_run_mode, FLAGS_log_file, FLAGS_log_level);

    auto db = ChatSystem::ODBFactory::create("root", "zhi204071", "127.0.0.1", "chatsystem", "utf8", 0, 1);
    ChatSystem::MessageTable msg_table(db);

    // insert(msg_table);

    // recent_message(msg_table);

    range_message(msg_table);

    // remove(msg_table);



    return 0;
}